package acmCoder;

import java.io.BufferedInputStream;
import java.util.Arrays;
import java.util.HashSet;
import java.util.Scanner;
import java.util.Set;

/**
 * Created by shuowu on 2017/10/27.
 */
public class Travel {

    private static final int MAX = 100003;

    private static int[][] map = new int[MAX][MAX];

    public static void main(String[] args) {
        Set<Integer> set  = new HashSet<>();
    }

    public void getRes() {
        Scanner scanner = new Scanner(new BufferedInputStream(System.in));
        while (scanner.hasNext()) {
            int n = scanner.nextInt();
            for (int i = 1; i <= n; i++) {
                Arrays.fill(map[i], Integer.MAX_VALUE);
            }
            int m = scanner.nextInt();
            for (int i = 1; i < n; i++) {
                map[i][i + 1] = scanner.nextInt();
            }

            map[n][0] = scanner.nextInt();
            for (int i = 1; i < m; i++) {
                int from = scanner.nextInt();
                int to = scanner.nextInt();
                int cost = scanner.nextInt();
                if(cost > map[i][i + 1]){

                }
                map[i][i + 1] = scanner.nextInt();
            }
        }
        scanner.close();
    }
}


//#include<bits/stdc++.h>
//        using namespace std;
//        typedef long long ll;
//        const int mx=6e4;
//        int n,m,head[mx],tot,d[mx],k;
//        ll po[mx],dis[50][mx];
//        struct node{
//        int y,v;
//        int nxt;
//        }Edge[mx<<1];
//        void AddEdge(int x,int y,int v)
//        {
//        Edge[tot].y=y;;
//        Edge[tot].v=v;
//        Edge[tot].nxt=head[x];
//        head[x]=tot++;
//        }
//        bool vis[mx];
//        void spfa(int x)
//        {
//        queue<int>que;
//        for(int i=1;i<=n;i++)dis[x][i]=1e16;
//        dis[x][d[x]]=0;
//        que.push(d[x]);
//        while(!que.empty()){
//        int no=que.front();
//        que.pop();
//        vis[no]=0;
//        for(int i=head[no];~i;i=Edge[i].nxt){
//        int son=Edge[i].y;
//        if(dis[x][son]>dis[x][no]+Edge[i].v){
//        dis[x][son]=dis[x][no]+Edge[i].v;
//        if(!vis[son])
//        {
//        que.push(son);
//        vis[son]=1;
//        }
//        }
//        }
//        }
//        }
//        int main()
//        {
//        while(~scanf("%d%d",&n,&m)){
//        tot=k=0;
//        int a,b,c;
//        memset(head,-1,sizeof(head));
//        for(int i=1;i<=n;i++){
//        scanf("%d",d+i);
//        AddEdge(i,i%n+1,d[i]);
//        AddEdge(i%n+1,i,d[i]);
//        }
//        for(int i=1;i<=n;i++)po[i]=po[i-1]+d[i];
//        for(int i=1;i<=m;i++){
//        scanf("%d%d%d",&a,&b,&c);
//        AddEdge(a,b,c);
//        AddEdge(b,a,c);
//        d[k++]=a;
//        d[k++]=b;
//        }
//        sort(d,d+k);
//        m=1;
//        for(int i=1;i<k;i++)if(d[i]!=d[i-1])d[m++]=d[i];
//        for(int i=0;i<m;i++)spfa(i);
//        scanf("%d",&k);
//        while(k--){
//        scanf("%d%d",&a,&b);
//        ll val=abs(po[a-1]-po[b-1]),ret=min(val,po[n]-val);
//        for(int i=0;i<m;i++)
//        ret=min(ret,dis[i][a]+dis[i][b]);
//        printf("%lld\n",ret);
//        }
//        }
//        return 0;
//        }
